//
// 平衡二叉树
// Created by 麻再挺 on 2021/12/20.
//

#ifndef DATA_STRUCTURE_C_AVL_SEARCH_H
#define DATA_STRUCTURE_C_AVL_SEARCH_H

#include <stdio.h>
#include <stdlib.h>
#include "../constant.h"

//分别定义平衡因子数
#define LH +1
#define EH  0
#define RH -1

// 平衡二叉树结点类型
typedef int AvlElemType;

//定义二叉排序树
typedef struct AvlNode {
    // 数据
    AvlElemType data;
    // 平衡标志
    int bf;
    // 左右孩子结点
    struct AvlNode *lChild, *rChild;
} *AvlTree, AvlNode;

/**
 * 平衡二叉树插入数据
 * @param t 树
 * @param e 结点
 * @param taller 标识是否需要旋转
 */
Status AVL_Insert(AvlTree *t, AvlElemType e, bool *taller);

/**
 * 中序遍历
 * @param t 树
 */
void InOrderAvlTraverse(AvlTree t);

/**
 * 在平衡树中查找结点
 * @param t 平衡树
 * @param e 结点
 * @param pos 树的位置
 * @return
 */
bool Find_Node(AvlTree t, AvlElemType e, AvlTree *pos);

#endif //DATA_STRUCTURE_C_AVL_SEARCH_H










